package beans;

import java.util.Collection;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.event.ValueChangeEvent;
import javax.faces.event.ValueChangeListener;

import modelo.Perfil;
import modelo.Usuario;
import dao.UsuarioDao;
import excepciones.DaoException;

@ManagedBean
@SessionScoped
public class LoginBean  {

	private Usuario objUsuario = null;
	private String error;

	private String usuario;
	private String password;
	private Perfil objPerfil;	

	public String getUsuario() {
		return usuario;
	}
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String doLogin(){
		
		String nombre = getUsuario();
		String clave = getPassword();
		String resultado = "error"; //"Paginas/index_error.jsp";	
		this.setError("Error de Login");
		try {

            UsuarioDao usrDao = new UsuarioDao();
            Usuario usr = usrDao.encontrarPorUsuario(nombre);    
            //Usuario usr = usrDao.findById((long) 1);
  			
			if(usr.verificarPass(clave)){	
				objUsuario = usr;
				Collection <Perfil> misPerfiles = usr.getPerfiles();
				if (misPerfiles.size() == 1){
					Perfil miPerfil = misPerfiles.iterator().next();					
					objPerfil = miPerfil;
					resultado = "exito"+miPerfil.getNombre();
				}else{
					if (misPerfiles.size() == 0){
						setError("Este usuario no tiene un perfil asignado");
					}else
						resultado = "irSeleccionPerfil";
				}
				
			}			
			usrDao.closeEntityManager();
			
			return resultado;
			}
        catch (DaoException e)
        {
           e.printStackTrace();           
           return resultado;
        }
	}

	public String getError() {
		return error;
	}
	
	public void setError(String error) {
		this.error = error;
	}

	public String logout() {	
		// Map<String, Object> cont = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().clear();
	    objUsuario = null;	
	    error = null;
	    usuario = null;
	    password = null;
	    objPerfil = null;
	    
	    return "salir";
	}
	
	public String seleccionPerfil(){
		//System.out.println("exito" + selectedPerfil);
		
		return "exitoAdministrador"; // + selectedPerfil.getNombre();
	}
	/*
	public String seleccionPerfil(ValueChangeEvent event){
		
		return "exito" + selectedPerfil.getNombre();
    }*/
		
	public boolean isLoggedIn() {
		return objUsuario!=null;
	}
	
	public Usuario getCurrentUser() {
		return objUsuario;
	}
	public Usuario getObjUsuario() {
		return objUsuario;
	}
	public void setObjUsuario(Usuario objUsuario) {
		this.objUsuario = objUsuario;
	}
	public Perfil getObjPerfil() {
		return objPerfil;
	}
	public void setObjPerfil(Perfil objPerfil) {
		this.objPerfil = objPerfil;
	}
	
	
}
